#include <iostream>
#include <thread>
#include <future>

/*
    packaged_task是⼀种对任务的封装;
*/

int add(int a,int b)
{
    std::cout << "加法" << "," << std::this_thread::get_id() << '\n';
    return a + b;
}

int main()
{
    //用智能指针管理packaged_task对象
    auto task = std::make_shared<std::packaged_task<int(int,int)>>(add); 

    std::future<int> fu = task->get_future();

    //不能直接传递packaged_task对象，会有生命周期问题，所以我们使用智能指针，传递智能指针对象
    std::thread th([task](){
        //执行异步任务
        (*task)(10,20);
    });

    auto res = fu.get();
    std::cout << res << "\n";

    th.join();

    return 0;
}